﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;

namespace Persistente.Avaliacao
{
    public class PAvaliacao
    {
        private DB_SIMETRIA _db;
        private SqlConnection _conexao = new SqlConnection(ConfigurationManager.ConnectionStrings["DB_SIMETRIA_SQL"].ConnectionString);
        public bool Salvar(int idAvaliacao, string teAvaliacao, int nrNotaGeral, int nrNotaQualidade, int nrNotaPreco, int nrNotaTempoUso, DateTime dtAvaliacao, string tePros, string teContras, int idProduto, int idUsuario)
        {
            try
            {
                _db = new DB_SIMETRIA();
                var tbAvaliacao = new tb_avaliacao();
                tbAvaliacao.id_avaliacao = idAvaliacao;
                tbAvaliacao.nr_nota_geral = nrNotaGeral;
                tbAvaliacao.nr_nota_qualidade = nrNotaQualidade;
                tbAvaliacao.nr_nota_preco = nrNotaPreco;
                tbAvaliacao.nr_nota_tempo_uso = nrNotaTempoUso;
                tbAvaliacao.te_avaliacao = teAvaliacao;
                tbAvaliacao.te_pros = tePros;
                tbAvaliacao.te_contras = teContras;
                tbAvaliacao.dt_avaliacao = dtAvaliacao;
                tbAvaliacao.produto_id_produto = idProduto;
                tbAvaliacao.usuario_id_usuario = idUsuario;
                _db.AddTotb_avaliacao(tbAvaliacao);
                _db.SaveChanges();

                return true;

            }
            catch (Exception e)
            {
                return false;
            }
            finally
            {
                _db.Connection.Close();
            }

        }

        public DataSet pegarAvaliacoes(string teAvaliacao = null, int nrNotaGeral = 0, int nrNotaQualidade=0, int nrNotaPreco =0, int nrNotaTempoUso = 0, DateTime? dtAvaliacao = null, string tePros = null, string teContras = null, int idProduto = 0, int idUsuario = 0)
        {

            var ds = new DataSet();

            string query = "SELECT ";
            query += " a.id_avaliacao";
            query += ", a.te_avaliacao";
            query += ", a.nr_nota_qualidade";
            query += ", a.nr_nota_preco";
            query += ", a.nr_nota_tempo_uso";
            query += ", a.nr_nota_geral";
            query += ", a.dt_avaliacao";
            query += ", a.te_pros";
            query += ", a.te_contras";
            query += ", p.id_produto";
            query += ", p.nm_produto";
            query += ", u.id_usuario";
            query += ", u.nm_usuario";
            query += " FROM tb_produto p,";
            query += "tb_usuario u,";
            query += "tb_avaliacao a";

            query += " WHERE p.id_produto = a.produto_id_produto";
            query += " AND a.usuario_id_usuario = u.id_usuario";


            if (!string.IsNullOrEmpty(teAvaliacao))
            {
                query += " AND a.te_avaliacao LIKE '%" + teAvaliacao + "%'";
            }

            if (nrNotaGeral != 0)
            {
                query += " AND a.nr_nota_geral =" + nrNotaGeral;
            }

            if (nrNotaQualidade != 0)
            {
                query += " AND a.nr_nota_qualidade =" + nrNotaQualidade;
            }

            if (nrNotaPreco != 0)
            {
                query += " AND a.nr_nota_preco =" + nrNotaPreco;
            }

            if (nrNotaTempoUso != 0)
            {
                query += " AND a.nr_nota_tempo_uso =" + nrNotaTempoUso;
            }

            if (dtAvaliacao != null)
            {
                query += " AND a.dt_avaliacao = '%" + dtAvaliacao + "%'";
            }

            if (!string.IsNullOrEmpty(teContras))
            {
                query += " AND a.te_contras LIKE '%" + teContras + "%'";
            }

            if (!string.IsNullOrEmpty(tePros))
            {
                query += " AND a.te_pros LIKE '%" + tePros + "%'";
            }

            if (idUsuario != 0)
            {
                query += " AND u.id_usuario =" + idUsuario;
            }

            if (idProduto != 0)
            {
                query += " AND p.id_produto =" + idProduto;
            }

            var cmd = new SqlCommand(query, _conexao);

            cmd.Connection = _conexao;

            if (_conexao.State == ConnectionState.Closed)
            {
                _conexao.Open();
            }

            var dataAdapter = new SqlDataAdapter(cmd);
            dataAdapter.Fill(ds);

            _conexao.Close();

            return ds;
        }

        public bool Remover(int idAvaliacao)
        {
            try
            {
                _db = new DB_SIMETRIA();
                var obTbAvaliacao = _db.tb_avaliacao.Where(q => q.id_avaliacao == idAvaliacao).FirstOrDefault();
                if (obTbAvaliacao == null)
                {
                    return false;
                }
                else
                {
                    _db.tb_avaliacao.DeleteObject(obTbAvaliacao);
                    _db.SaveChanges();
                    return true;
                }

            }
            catch (Exception e)
            {
                throw;
            }
            finally
            {
                _db.Connection.Close();
            }
        }

        public tb_avaliacao pegarAvaliacaoPorId(int idAvaliacao)
        {


            try
            {
                _db = new DB_SIMETRIA();
                return _db.tb_avaliacao.Where(q => q.id_avaliacao == idAvaliacao).FirstOrDefault();
            }
            catch (Exception e)
            {
                throw;
            }
            finally
            {
                _db.Connection.Close();
            }

        }

        public bool Alterar(int idAvaliacao, tb_avaliacao obTbAvaliacaoNovo)
        {
            try
            {
                _db = new DB_SIMETRIA();
                var obTbAvaliacaoVelho =
                    _db.tb_avaliacao.Where(q => q.id_avaliacao == idAvaliacao).FirstOrDefault();

                obTbAvaliacaoVelho.te_avaliacao = obTbAvaliacaoNovo.te_avaliacao;
                obTbAvaliacaoVelho.te_pros = obTbAvaliacaoNovo.te_pros;
                obTbAvaliacaoVelho.te_contras = obTbAvaliacaoNovo.te_contras;
                obTbAvaliacaoVelho.nr_nota_geral = obTbAvaliacaoNovo.nr_nota_geral;
                obTbAvaliacaoVelho.nr_nota_preco = obTbAvaliacaoNovo.nr_nota_preco;
                obTbAvaliacaoVelho.nr_nota_qualidade = obTbAvaliacaoNovo.nr_nota_qualidade;
                obTbAvaliacaoVelho.nr_nota_tempo_uso = obTbAvaliacaoNovo.nr_nota_tempo_uso;
                obTbAvaliacaoVelho.produto_id_produto = obTbAvaliacaoNovo.produto_id_produto;
                obTbAvaliacaoVelho.usuario_id_usuario = obTbAvaliacaoNovo.usuario_id_usuario;
                obTbAvaliacaoVelho.dt_avaliacao = obTbAvaliacaoVelho.dt_avaliacao;

                _db.SaveChanges();
                return true;
            }
            catch (Exception e)
            {
                return false;
            }
            finally
            {
                _db.Connection.Close();
            }
        }
    }
}
